GitHub の Pull Request の作成/終了に付随する作業を alias を使って楽にする

GitHub の Pull Request の作成/終了に付随する作業を alias を使って楽にする

Clock Icon2017.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Pull Request に付随する「ちょっとめんどい」作業

GitHub で Pull Request (プルリクエスト) を作成するとき、次のようなコマンドを毎回打っていませんか?

$ git checkout -b feature/hoge
$ git commit --allow-empty -m 'Make PR'
$ git push origin feature/hoge
$ hub pull-request

※ 最終行のコマンドは git のコマンドライン支援ツール「hub」のインストールが必要

または Pull Request (プルリクエスト) がマージされた後に、次のようなコマンドを毎回打っていませんか?

$ git checkout master
$ git pull origin master
$ git branch -D feature/hoge

簡単なコマンドではありますが、冷静に考えると ちょっと面倒くさい ですよね。これらは git に備わっている alias (エイリアス) という機能を使うと、ひとまとめにできます。

検証環境

  • macOS Sierra 10.12.3
  • git 2.8.4
  • hub 2.2.3

git のコマンドライン支援ツール「hub」のインストールが行われている前提で進めます。導入されていない方は、下記の記事を参考にインストールしておきましょう。

GitHub のコマンドラインツール「hub」の基本と便利な使い方のまとめ

ブランチを作って空コミットしてプッシュして Pull Request を作成する

Pull Request を作成するときには、通常では以下の作業を行います。

  1. ブランチを作成する
  2. ブランチに対して空コミットする
  3. リモートリポジトリに push する
  4. 作成したブランチの Pull Request を作成する

これを一発で行うようにするには .gitconfig に以下を登録します。

[alias]
    ec = !git commit --allow-empty -m \"Make PR\"
    mkpr = !"f() { git checkout -b $1; git ec; git push -u origin $1; hub pull-request; }; f"

ec は「empty commit」の略、mkpr は「make pull request」の略

これで、ベースとなるブランチで以下のコマンドを実行すると Pull Request が作成できます。

$ git mkpr feature/hoge

Pull Request がマージされた後に master を pull してブランチ消す

Pull Request がマージされた後には、通常では以下の作業を行います。

  1. master (または develop) を checkout する
  2. master (または develop) の最新コミットを pull する
  3. master と develop 以外のマージ済みのローカルブランチを全て削除する

git-flow を使っている場合は git flow feature finish hoge で行えますが、git-flow を使わない場合でも同様のことは簡単に行えます。

.gitconfig に以下を登録します。

[alias]
        d = !git branch --merged | grep -vE '^\\*|master$|develop$' | xargs -I % git branch -d %
        end = !"f() { git checkout $1; git pull origin $1; git d; }; f"

これで、マージ後のブランチ内で以下のコマンドを実行するだけで完了します。

$ git end master

まとめ

ちょっとした作業も、積み重なると大きなタイムロスになりかねません。作業を常に最適化し、本当に価値のある作業により注力できるようにしましょう。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.